package API使用;

/**
 * @ClassName : StringText
 * @Author : LV88VL
 * @Date: 2021/3/8 15:33
 * @Description : String类
 */
public class StringText {
    public static void main(String[] args) {
        System.out.println("========两个内容相同，创建方式不同的字符串======");
        System.out.println("**************************");
        System.out.println("面试题:为什么下面直接比较是false,而通过String.euqals比较是true");
        String s1="abc";
        String s2=new String("abc");
        /*s3和s4的不同：
        s3在创建时，在内存只有一个对象-------->在常量池里（判断首地址是否一致，首地址包含数值）
        s4在创建时，有两个对象，先在堆里创建了一个方法对象，又在常量池中创建,
        在new的过程中，创建了一个构造函数String()，将常量池中的"abc"赋予构造函数时
        是先传递地址，在传递数据
        */
        System.out.println(s1==s2);
        /*因为String类复写了equals方法
         建立字符串自己的判断相同依据，通过字符串对象中的内容来判断的
        public boolean equals(Object anObject) {
            if (this == anObject) {
                return true;
            }
            if (anObject instanceof String) {
                String anotherString = (String)anObject;
                int n = value.length;
                if (n == anotherString.value.length) {
                    char v1[] = value;
                    char v2[] = anotherString.value;
                    int i = 0;
                    while (n-- != 0) {
                        if (v1[i] != v2[i])
                            return false;
                        i++;
                    }
                    return true;
                }
            }
            return false;
        }*/
        System.out.println(s1.equals(s2));
    }
}
class StringDescribe{
/**
    字符获取功能：
    int length()----->获取数组长度
    char charAt(int index)----->返回指定索引的 字符
    int indexOf(int ch)----->返回在指定字符的第一个发生的字符串中的索引。
    indexOf(int ch, int fromIndex) ----->返回在指定字符的第一个发生的字符串中的索引，
    在指定的索引处开始搜索。
    indexOf(String str) ----->返回指数在这个字符串指定的子字符串中第一个出现的。
    indexOf(String str, int fromIndex) ----->返回此字符串的指定子字符串中第一个出现在索引中，
    从指定索引处开始。
 ************返回时，保留左边不保留右边
    substring(int beginIndex) ----->返回一个字符串，这个字符串的子串。
    substring(int beginIndex, int endIndex) ----->返回一个字符串，这个字符串的子串。
*/

/**
 *      字符转换功能：
 *      byte[]      getBytes()  ----->把字符串转化为字节数组（Ascal码）
 *      char[]       toCharArray()  ----->将此字符串转换为一个新的字符数组
 *      static       String copyValueOf(char[] data)   ----->把字符数组转换为字符串
 *      static      String valueOf(（任意基本数据类型） b)    ----->把基本数据类型数组转换为字符串
 *     String       toLowerCase  ----->把字符串转换为小写
 *     String       toUpperCase   ----->把字符串转换为大写
 *     String       concat(String str)   ----->拼接字符
 */

/**
 *      字符替换功能：
 *      String      replace(char oldChar, char newChar) ----->用新的字符去替换指定字符
 *      String      replace(String oldString, String newString) ----->用新的字符串去替换指定字符
 *      字符切割功能：
 *      String[]        split(String regex)----->
 *      ****************************************
 *      eg：
 *      String ages = "20-30";
 *      String[] strArray = ages.split("-");
 *      for(int x=0; x < strArray.length; x++){
 *          System.out.println(strArray[x]);
 *      }
 *      输出结果：
 *      20
 *      30
 *      ***************************************
 *      去除空格功能：
 *      String      trim()----->返回一个字符串，它的值是字符串，任何前导和尾随空格删除。
 *      按字典顺序比较两个字符：
 *      int compareTo(String anotherString)
 *      int compareToIgnoreCase(String str)  ----->按字典顺序比较两个字符串，忽略大小写的差异。
 */
}
